﻿Public Class FrmUnidadMedida
    Dim dao As New DAOGeneral
    Dim operacion As accion 'estado de la operacion en curso
    Dim ventanaPadre As Form
    Dim vengoDesdeMenuPrincipal As Boolean 'variable q me dice si vengo desde un form o desde el menu ppal
    Dim id_um As Integer

    Public Sub New(ByRef ventana As Form)
        InitializeComponent()
        Me.ventanaPadre = ventana
        Me.ventanaPadre.Enabled = False
        vengoDesdeMenuPrincipal = False
        cargarGrilla()
    End Sub

    Public Sub New()
        InitializeComponent()  ' Llamada necesaria para el diseñador.
        vengoDesdeMenuPrincipal = True
        cargarGrilla()
    End Sub

    Enum accion 'tipificacion de estado de la operacion en curso
        insertar
        modificar
    End Enum

    Private Sub cargarGrilla()
        Dim tabla As New Data.DataTable
        tabla = dao.cargarTablaUM()
        Me.grid_unidad_medida.DataSource = tabla
        grid_unidad_medida.AutoResizeColumns() 'define automaticamente el ancho de las columnas de la grilla conforme al contenido
    End Sub



    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        If vengoDesdeMenuPrincipal = True Then
            Me.Dispose()
        Else
            Me.Close()  'cierra el formulario
            ventanaPadre.Enabled = True 'Habilita el menú principal
            ventanaPadre.Focus()        'y le hace foco
        End If
    End Sub

    Private Sub FrmUnidadMedida_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        If vengoDesdeMenuPrincipal = True Then
            Me.Dispose()
        Else
            Me.Dispose()  'cierra el formulario
            ventanaPadre.Enabled = True 'Habilita el menú principal
            ventanaPadre.Focus()        'y le hace foco
        End If
    End Sub

    Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminar.Click
        If MessageBox.Show("¿Está seguro que desea Eliminar " & Me.grid_unidad_medida.CurrentRow.Cells(1).Value & "?", "Eliminar Localidad", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

            If dao.EliminarUM(Me.grid_unidad_medida.CurrentRow.Cells(0).Value) = True Then 'utiliza el metodo borrar pasando el comando correspondiente con valores de id de la fila seleccionada  
                Me.lbl_mensaje.ForeColor = Color.Blue
                Me.lbl_mensaje.Text = "La unidad de medida fue eliminada con éxito."    'muestra un mensaje al usuario
                Me.txt_nombre.Text = ""    'setea en blanco el campo
                txt_codigo.Text = ""
                txt_observaciones.Text = ""
                txt_nombre.Focus()
                cargarGrilla()   'actualiza la visualizacion de la tabla con los nuevos valores modificados
            Else
                Me.lbl_mensaje.ForeColor = Color.Red
                Me.lbl_mensaje.Text = "La unidad de medida no pudo ser eliminada"    'muestra un mensaje al usuario
                Me.txt_nombre.Text = ""    'setea en blanco el campo
                txt_codigo.Text = ""
                txt_observaciones.Text = ""
                txt_nombre.Focus()
            End If
        End If
    End Sub

    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
        If Me.txt_nombre.Text = "" Then  'valida el campo descripcion
            Me.lbl_mensaje.ForeColor = Color.Red
            Me.lbl_mensaje.Text = "¡Debe ingresar un nombre!"
            Me.txt_nombre.Focus()
            Exit Sub
        End If

        If Me.txt_codigo.Text = "" Then  'valida el campo descripcion
            Me.lbl_mensaje.ForeColor = Color.Red
            Me.lbl_mensaje.Text = "¡Debe ingresar un código a la unidad de medida!"
            Me.txt_nombre.Focus()
            Exit Sub
        End If

        If Me.operacion = accion.insertar Then  'si la operacion en curso es insertar:
            If dao.GuardarUM(Me.txt_nombre.Text, txt_codigo.Text, txt_observaciones.Text) = True Then
                Me.lbl_mensaje.ForeColor = Color.Blue
                Me.lbl_mensaje.Text = "Unidad de medida guardada con éxito." 'muestra un mensaje al usuario
            Else
                Me.lbl_mensaje.ForeColor = Color.Blue
                Me.lbl_mensaje.Text = "La unidad de medida no se pudo guardar" 'muestra un mensaje al usuario
            End If
        End If


        If Me.operacion = accion.modificar Then 'si la operacion es modificar:
            If dao.ActualizarUM(id_um, Me.txt_nombre.Text, txt_codigo.Text, txt_observaciones.Text) = True Then 'si se modifico correctamente
                Me.lbl_mensaje.ForeColor = Color.Blue
                Me.lbl_mensaje.Text = "Localidad modificada con éxito."   'muestra un mensaje al usuario
            Else
                Me.lbl_mensaje.ForeColor = Color.Blue
                Me.lbl_mensaje.Text = "Localidad no modificada"   'muestra un mensaje al usuario
            End If

        End If

        Me.txt_nombre.Text = ""    'setea en blanco el campo
        txt_codigo.Text = ""
        txt_observaciones.Text = ""
        txt_nombre.Focus() 'vuelvo el foco al txt
        cargarGrilla()   'actualiza la visualizacion de la tabla con los nuevos valores modificados

    End Sub


    'filtra a medida que voy escribiendo
    Private Sub txt_nombre_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_nombre.TextChanged
        grid_unidad_medida.DataSource = dao.buscarUMXNombre(txt_nombre.Text) 'voy filtrando en la grilla a medida que inserta el nombre
        lbl_mensaje.Text = ""
        If grid_unidad_medida.Rows.Count = 0 Then
            btnGuardar.Enabled = True
            operacion = accion.insertar
        Else
            btnGuardar.Enabled = False
            operacion = accion.modificar
        End If
    End Sub

    'VA FILTRANDO CUANDO INGRESO EL CODIGO
    Private Sub txt_codigo_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_codigo.TextChanged
        grid_unidad_medida.DataSource = dao.buscarUMXCodigo(txt_codigo.Text) 'voy filtrando en la grilla a medida que inserta el nombre
        lbl_mensaje.Text = ""
        If grid_unidad_medida.Rows.Count = 0 Then
            btnGuardar.Enabled = True
            operacion = accion.insertar
        Else
            btnGuardar.Enabled = False
            operacion = accion.modificar
        End If
    End Sub

    Private Sub grid_unidad_medida_CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grid_unidad_medida.CellDoubleClick
        Me.operacion = accion.modificar
        Me.txt_nombre.Focus()
        Me.txt_nombre.Text = Me.grid_unidad_medida.CurrentRow.Cells(1).Value 'muestra el contenido del campo a modificar
        txt_codigo.Text = Me.grid_unidad_medida.CurrentRow.Cells(2).Value
        txt_observaciones.Text = Me.grid_unidad_medida.CurrentRow.Cells(3).Value.ToString

        id_um = Integer.Parse(grid_unidad_medida.CurrentRow.Cells(0).Value.ToString())
    End Sub

    Private Sub txt_observaciones_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_observaciones.TextChanged
        btnGuardar.Enabled = True
        operacion = accion.modificar
    End Sub
End Class